﻿using System.Collections.Generic;

namespace CoreLibrary.Mvc {
    public class MimeTypes {
        public readonly static string Json = "application/json";
        public readonly static string Excel = "application/vnd.ms-excel";
        public readonly static string TextHtml = "text/html";
        public readonly static string TextPlain = "text/plain";
        public readonly static string OctetStream = System.Net.Mime.MediaTypeNames.Application.Octet;
        public readonly static string Pdf = System.Net.Mime.MediaTypeNames.Application.Pdf;

        /// <summary>
        /// Gets the mime type from the current file name.
        /// </summary>
        /// <param name="filename">The file name.</param>
        /// <returns>The mime type</returns>
        public static string Get (string filename) {
            var fileExpension = FileNameUtil.GetExtension(filename).TrimStart('.');
            return MimeTypesDictionary.ContainsKey(fileExpension)
                 ? MimeTypesDictionary[fileExpension]
                 : "unknown/unknown";
        }

        private static readonly Dictionary<string, string> MimeTypesDictionary = new Dictionary<string, string> {
				{"ai",   "application/postscript"},
				{"aif",  "audio/x-aiff"},
				{"aifc", "audio/x-aiff"},
				{"aiff", "audio/x-aiff"},
				{"asc",  "text/plain"},
				{"atom", "application/atom+xml"},
				{"au",   "audio/basic"},
				{"avi", "video/x-msvideo"},
				{"bcpio", "application/x-bcpio"},
				{"bin", "application/octet-stream"},
				{"bmp", "image/bmp"},
				{"cdf", "application/x-netcdf"},
				{"cgm", "image/cgm"},
				{"class", "application/octet-stream"},
				{"cpio", "application/x-cpio"},
				{"cpt", "application/mac-compactpro"},
				{"csh", "application/x-csh"},
				{"css", "text/css"},
				{"dcr", "application/x-director"},
				{"dif", "video/x-dv"},
				{"dir", "application/x-director"},
				{"djv", "image/vnd.djvu"},
				{"djvu", "image/vnd.djvu"},
				{"dll", "application/octet-stream"},
				{"dmg", "application/octet-stream"},
				{"dms", "application/octet-stream"},
				{"doc", "application/msword"},
				{"docx","application/vnd.openxmlformats-officedocument.wordprocessingml.document"},
				{"dotx", "application/vnd.openxmlformats-officedocument.wordprocessingml.template"},
				{"docm","application/vnd.ms-word.document.macroEnabled.12"},
				{"dotm","application/vnd.ms-word.template.macroEnabled.12"},
				{"dtd", "application/xml-dtd"},
				{"dv", "video/x-dv"},
				{"dvi", "application/x-dvi"},
				{"dxr", "application/x-director"},
				{"eps", "application/postscript"},
				{"etx", "text/x-setext"},
				{"exe", "application/octet-stream"},
				{"ez", "application/andrew-inset"},
				{"gif", "image/gif"},
				{"gram", "application/srgs"},
				{"grxml", "application/srgs+xml"},
				{"gtar", "application/x-gtar"},
				{"hdf", "application/x-hdf"},
				{"hqx", "application/mac-binhex40"},
				{"htm",  "text/html"},
				{"html", "text/html"},
				{"ice", "x-conference/x-cooltalk"},
				{"ico", "image/x-icon"},
				{"ics", "text/calendar"},
				{"ief", "image/ief"},
				{"ifb", "text/calendar"},
				{"iges", "model/iges"},
				{"igs", "model/iges"},
				{"jnlp", "application/x-java-jnlp-file"},
				{"jp2", "image/jp2"},
				{"jpe", "image/jpeg"},
				{"jpeg", "image/jpeg"},
				{"jpg", "image/jpeg"},
				{"js", "application/x-javascript"},
				{"kar", "audio/midi"},
				{"latex", "application/x-latex"},
				{"lha", "application/octet-stream"},
				{"lzh", "application/octet-stream"},
				{"m3u", "audio/x-mpegurl"},
				{"m4a", "audio/mp4a-latm"},
				{"m4b", "audio/mp4a-latm"},
				{"m4p", "audio/mp4a-latm"},
				{"m4u", "video/vnd.mpegurl"},
				{"m4v", "video/x-m4v"},
				{"mac", "image/x-macpaint"},
				{"man", "application/x-troff-man"},
				{"mathml", "application/mathml+xml"},
				{"me", "application/x-troff-me"},
				{"mesh", "model/mesh"},
				{"mid", "audio/midi"},
				{"midi", "audio/midi"},
				{"mif", "application/vnd.mif"},
				{"mov", "video/quicktime"},
				{"movie", "video/x-sgi-movie"},
				{"mp2", "audio/mpeg"},
				{"mp3", "audio/mpeg"},
				{"mp4", "video/mp4"},
				{"mpe", "video/mpeg"},
				{"mpeg", "video/mpeg"},
				{"mpg", "video/mpeg"},
				{"mpga", "audio/mpeg"},
				{"ms", "application/x-troff-ms"},
				{"msh", "model/mesh"},
				{"mxu", "video/vnd.mpegurl"},
				{"nc", "application/x-netcdf"},
				{"oda", "application/oda"},
				{"ogg", "application/ogg"},
				{"pbm", "image/x-portable-bitmap"},
				{"pct", "image/pict"},
				{"pdb", "chemical/x-pdb"},
				{"pdf", "application/pdf"},
				{"pgm", "image/x-portable-graymap"},
				{"pgn", "application/x-chess-pgn"},
				{"pic", "image/pict"},
				{"pict", "image/pict"},
				{"png", "image/png"}, 
				{"pnm", "image/x-portable-anymap"},
				{"pnt", "image/x-macpaint"},
				{"pntg", "image/x-macpaint"},
				{"ppm", "image/x-portable-pixmap"},
				{"ppt", "application/vnd.ms-powerpoint"},
				{"pptx","application/vnd.openxmlformats-officedocument.presentationml.presentation"},
				{"potx","application/vnd.openxmlformats-officedocument.presentationml.template"},
				{"ppsx","application/vnd.openxmlformats-officedocument.presentationml.slideshow"},
				{"ppam","application/vnd.ms-powerpoint.addin.macroEnabled.12"},
				{"pptm","application/vnd.ms-powerpoint.presentation.macroEnabled.12"},
				{"potm","application/vnd.ms-powerpoint.template.macroEnabled.12"},
				{"ppsm","application/vnd.ms-powerpoint.slideshow.macroEnabled.12"},
				{"ps", "application/postscript"},
				{"qt", "video/quicktime"},
				{"qti", "image/x-quicktime"},
				{"qtif", "image/x-quicktime"},
				{"ra", "audio/x-pn-realaudio"},
				{"ram", "audio/x-pn-realaudio"},
				{"ras", "image/x-cmu-raster"},
				{"rdf", "application/rdf+xml"},
				{"rgb", "image/x-rgb"},
				{"rm", "application/vnd.rn-realmedia"},
				{"roff", "application/x-troff"},
				{"rtf", "text/rtf"},
				{"rtx", "text/richtext"},
				{"sgm", "text/sgml"},
				{"sgml", "text/sgml"},
				{"sh", "application/x-sh"},
				{"shar", "application/x-shar"},
				{"silo", "model/mesh"},
				{"sit", "application/x-stuffit"},
				{"skd", "application/x-koan"},
				{"skm", "application/x-koan"},
				{"skp", "application/x-koan"},
				{"skt", "application/x-koan"},
				{"smi", "application/smil"},
				{"smil", "application/smil"},
				{"snd", "audio/basic"},
				{"so", "application/octet-stream"},
				{"spl", "application/x-futuresplash"},
				{"src", "application/x-wais-source"},
				{"sv4cpio", "application/x-sv4cpio"},
				{"sv4crc", "application/x-sv4crc"},
				{"svg", "image/svg+xml"},
				{"swf", "application/x-shockwave-flash"},
				{"t", "application/x-troff"},
				{"tar", "application/x-tar"},
				{"tcl", "application/x-tcl"},
				{"tex", "application/x-tex"},
				{"texi", "application/x-texinfo"},
				{"texinfo", "application/x-texinfo"},
				{"tif", "image/tiff"},
				{"tiff", "image/tiff"},
				{"tr", "application/x-troff"},
				{"tsv", "text/tab-separated-values"},
				{"txt", "text/plain"},
				{"ustar", "application/x-ustar"},
				{"vcd", "application/x-cdlink"},
				{"vrml", "model/vrml"},
				{"vxml", "application/voicexml+xml"},
				{"wav", "audio/x-wav"},
				{"wbmp", "image/vnd.wap.wbmp"},
				{"wbmxl", "application/vnd.wap.wbxml"},
				{"wml", "text/vnd.wap.wml"},
				{"wmlc", "application/vnd.wap.wmlc"},
				{"wmls", "text/vnd.wap.wmlscript"},
				{"wmlsc", "application/vnd.wap.wmlscriptc"},
				{"wrl", "model/vrml"},
				{"xbm", "image/x-xbitmap"},
				{"xht", "application/xhtml+xml"},
				{"xhtml", "application/xhtml+xml"},
				{"xls", "application/vnd.ms-excel"},                        
				{"xml", "application/xml"},
				{"xpm", "image/x-xpixmap"},
				{"xsl", "application/xml"},
				{"xlsx","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"},
				{"xltx","application/vnd.openxmlformats-officedocument.spreadsheetml.template"},
				{"xlsm","application/vnd.ms-excel.sheet.macroEnabled.12"},
				{"xltm","application/vnd.ms-excel.template.macroEnabled.12"},
				{"xlam","application/vnd.ms-excel.addin.macroEnabled.12"},
				{"xlsb","application/vnd.ms-excel.sheet.binary.macroEnabled.12"},
				{"xslt", "application/xslt+xml"},
				{"xul", "application/vnd.mozilla.xul+xml"},
				{"xwd", "image/x-xwindowdump"},
				{"xyz", "chemical/x-xyz"},
				{"zip", "application/zip"} };
    }
}